// @algorithm @lc id=7 lang=cpp
// @title reverse-integer

#include <iostream>
#include <vector>
#include <string>
#include "algm/algm.h"
using namespace std;
// @test(123)=321
// @test(-123)=-321
// @test(120)=21

/**
 * @brief
 * 本题重点考查数是如何在计算机中存储的概念, 注意会溢出的一些情况就好了
 */
class Solution {
public:
    int reverse(int x)
    {
        int64_t res = 0;
        if (x >= 0) {
            while (x) {
                res = res * 10 + (x % 10);
                x /= 10;
            }
            return res <= 2147483647 ? (int)res : 0;
        } else {
            int64_t y = x; //不要直接赋值为-x, 因为-x超过32位时仍然会用32位表示, 这就错误了
            y         = -y;
            while (y) {
                res = res * 10 + (y % 10);
                y /= 10;
            }
            return -res >= -2147483648 ? (int)(-res) : 0;
        }
    }
};